* Boston, MA 02111-1307, USA.\r
*/\r
\r
+#include <windows.h>\r
#include <gmodule.h>\r
#include <gtk/gtk.h>\r
\r
#include "wimp_style.h"\r
#include "wimp_rc_style.h"\r
\r
+#ifndef WM_THEMECHANGED\r
+#define WM_THEMECHANGED 0x031A /* winxp only */\r
+#endif\r
+\r
+static GdkFilterReturn\r
+global_filter_func (void *xevent,\r
+ GdkEvent *event,\r
+ gpointer data)\r
+{\r
+ MSG *msg = (MSG *) xevent;\r
+ GList * toplevels, *iter;\r
+ GtkWidget * toplevel;\r
+\r
+ switch (msg->message)\r
+ {\r
+ case WM_THEMECHANGED:\r
+ case WM_SYSCOLORCHANGE:\r
+ toplevels = gtk_window_list_toplevels ();\r
+ if (toplevels) {\r
+ xp_theme_exit();\r
+ for (iter = g_list_first(toplevels);\r
+ iter;\r
+ iter = g_list_next (iter)) {\r
+ toplevel = (GtkWidget*)iter->data;\r
+ if (toplevel)\r
+ gtk_widget_reset_rc_styles (toplevel);\r
+ }\r
+ g_list_free (toplevels);\r
+ }\r
+ return GDK_FILTER_REMOVE;\r
+ default:\r
+ return GDK_FILTER_CONTINUE;\r
+ }\r
+}\r
+\r
G_MODULE_EXPORT void\r
theme_init (GTypeModule *module)\r
{\r
wimp_rc_style_register_type (module);\r
wimp_style_register_type (module);\r
+\r
+ gdk_window_add_filter (NULL, global_filter_func, NULL);\r
}\r
\r
G_MODULE_EXPORT void\r
theme_exit (void)\r
{\r
+ gdk_window_remove_filter (NULL, global_filter_func, NULL);\r
}\r
\r
G_MODULE_EXPORT GtkRcStyle *\r
theme_create_rc_style (void)\r
{\r
- return GTK_RC_STYLE (g_object_new (WIMP_TYPE_RC_STYLE, NULL)); \r
+ return GTK_RC_STYLE (g_object_new (WIMP_TYPE_RC_STYLE, NULL));\r
}\r
\r
/* The following function will be called by GTK+ when the module\r